package com.hzw.saas.common.verify.service;

import com.hzw.saas.common.verify.enums.SmsType;

/**
 * 验证服务，比如短信验证，邮件验证
 *
 * @author zzl
 * @since 01/12/2021
 */
public interface IVerifyService {

    /**
     * 发送指定的验证码到目标手机
     *
     * @param phone 目标手机号
     * @param code  验证码
     * @return 成功true/失败false
     */
    boolean sendSmsVerifyCode(String phone, String code, SmsType smsType);

    /**
     * 发送内置的验证码到目标手机
     *
     * @param phone 手机号
     * @return 成功true/失败false
     */
    boolean sendSmsVerifyCode(String phone, SmsType smsType);

    /**
     * 发送指定的验证码到目标邮箱
     *
     * @param email 目标邮箱地址
     * @param code  验证码
     * @return 成功true/失败false
     */
    boolean sendEmailVerifyCode(String email, String code);

    /**
     * 发送内置的验证码到目标邮箱
     *
     * @param email 目标邮箱地址
     * @return 成功true/失败false
     */
    boolean sendEmailVerifyCode(String email);

    /**
     * 校验手机或邮箱验证码
     * 校验成功时，会删除验证码
     *
     * @param key  手机号或邮箱
     * @param code 验证码
     * @return 校验成功true/校验失败false
     */
    boolean verify(String key, String code);

    /**
     * 校验手机或邮箱验证码
     *
     * @param key          手机号或邮箱
     * @param code         验证码
     * @param deleteOnPass 当校验为true时是否删除该验证码
     * @return 校验成功true/校验失败false
     */
    boolean verify(String key, String code, boolean deleteOnPass);

    /**
     * 清除验证码（一般用于已验证通过）
     *
     * @param keys 手机号或邮箱
     */
    void delete(String... keys);

    /**
     * 获取指定手机号或邮箱的验证码，测试用
     *
     * @param key 手机号或邮箱
     * @return 验证码
     */
    String get(String key);


}
